/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AccesoBaseDatos;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import Controladores.Form.CrearPlanEstudioForm;
import java.util.LinkedList;
import ClasesParaConsultaJsp.Curso;
/**
 *
 * @author a70204
 */
public class GatewayPlanEstudio {
    private ConexionBaseDatos establecerConexion = new ConexionBaseDatos();
    private Connection conn = null;
    private Statement stm = null; 
    
    public GatewayPlanEstudio(){

    }
    
    public void AbrirConexion(){
        conn = establecerConexion.ConectarBD();
    }
    
    public boolean UpdatePlanEstudio(String ID, String nombre, String grado, String totalCreditos, String descripcion, String ultimaModificacion){
        boolean actualizo = false;
        this.AbrirConexion();
        if (conn != null) {
            try {//se realiza el update
                stm = conn.createStatement();
                String strSQL = "Update PlanEstudio set nombre='"+nombre+"',grado='"+grado+"',totalCreditos='"+totalCreditos+"',descripcion='"+descripcion+"',ultimaModificacion='"+ultimaModificacion+"' where ID='"+ID+"'";
                int rowsEffected = stm.executeUpdate(strSQL);
                actualizo = true;
            }catch(SQLException ex){
                actualizo = false;
            }
            try {
                conn.close();//cierra la conexion  */
            } catch (SQLException ex) {
                Logger.getLogger(GatewayProfesor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }   
        return actualizo;
    }
    
     public static LinkedList<CrearPlanEstudioForm> getPlan(String ID){
      LinkedList<CrearPlanEstudioForm> listaPlan =new LinkedList<CrearPlanEstudioForm>();
      ConexionBaseDatos establecerConexion = new ConexionBaseDatos();
      Connection conn = null;
      try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery("select * from PlanEstudio where ID='"+ID+"'");
             while (rs.next()){
                CrearPlanEstudioForm Plan = new CrearPlanEstudioForm();
                Plan.setID(rs.getString("ID"));
                Plan.setNombre(rs.getString("nombre"));
                Plan.setGrado(rs.getString("grado"));
                Plan.setCantCreditos(rs.getString("totalCreditos"));
                Plan.setDescripcion(rs.getString("descripcion"));
                Plan.setUltimaModificacion(rs.getString("ultimaModificacion"));
                listaPlan.add(Plan);
             }
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
      return listaPlan;
   }//fin metodo
    
   
     
     
   public static LinkedList<Curso> getCursos(String ID){
      LinkedList<Curso> listaPlan =new LinkedList<Curso>();
      ConexionBaseDatos establecerConexion = new ConexionBaseDatos();
      Connection conn = null;
      try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             Statement st1 = conn.createStatement();
             ResultSet rs = st.executeQuery("Select C.sigla, C.nombre, C.creditos, Ci.añoCurso, Ci.semestre From Curso C, Ciclos Ci Where C.sigla = ci.sigla && Ci.ID='"+ID+"' order by Ci.añoCurso, Ci.semestre");
             String requisitos = "";
             String correquisitos = "";
             String sigla="";
             while (rs.next()){
                Curso curso = new Curso();
                sigla=rs.getString("sigla");
                curso.setSigla(sigla);
                curso.setNombre(rs.getString("nombre"));
                curso.setCreditos(rs.getString("creditos"));
                curso.setAno(rs.getString("añoCurso"));
                curso.setSemestre(rs.getString("semestre"));
                ResultSet rs1 = st1.executeQuery("select SiglaCursoRequisito, SiglaCorrequisito From DependenciasCursos where SiglaCurso='"+sigla+"'");
                while (rs1.next()){
                    requisitos += rs1.getString("SiglaCursoRequisito")+" ";
                    correquisitos += rs1.getString("SiglaCorrequisito")+" ";
                }
                curso.setRequisito(requisitos);
                curso.setCorrequisito(correquisitos);
                listaPlan.add(curso);
                requisitos="";
                correquisitos="";
             }
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
      return listaPlan;
   }//fin metodo
     
     
     
    
    public boolean VerificarExistencia(String ID){
     boolean existe = false;
     try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery("select ID from PlanEstudio where ID ='"+ID+"'");
             while (rs.next()&&existe==false){
                 existe = true;
             }
             
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
     return existe;
    }
    
    //este es para agregar un curso al plan, tabla de ciclos
    public boolean VerificarExistenciaPlanCurso(String ID, String sigla){
     boolean existe = false;
     try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             //ve si el plan de estudios existe
             ResultSet rs = st.executeQuery("select ID from PlanEstudio where ID ='"+ID+"'");
             while (rs.next()&&existe==false){
                 existe = true;
             }
             //si existe el plan de estudios, hay que revisar que exista curso
             if(existe == true){
                existe = false;
                ResultSet rs1 = st.executeQuery("select sigla from Curso where sigla ='"+sigla+"'");
                while (rs1.next()&&existe==false){
                    existe = true;
                }
             }
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
     return existe;
    }
    
    public boolean VerificaSiCursoEnPlan(String ID, String sigla){
     boolean existe = false;
     try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery("select * from Ciclos where ID ='"+ID+"' && sigla='"+sigla+"'");
             while (rs.next()&&existe==false){
                 existe = true;
             }
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
     return existe;
    }
    
    
    public boolean UpdatePlanEstudioCiclos(String ID, String sigla, String ano, String semestre){
        boolean actualizo = false;
        this.AbrirConexion();
        if (conn != null) {
            try {//se realiza el update
                stm = conn.createStatement();
                String strSQL = "Update Ciclos set añoCurso='"+ano+"',semestre='"+semestre+"' where ID='"+ID+"' && sigla='"+sigla+"'";
                int rowsEffected = stm.executeUpdate(strSQL);
                actualizo = true;
            }catch(SQLException ex){
                actualizo = false;
            }
            try {
                conn.close();//cierra la conexion  */
            } catch (SQLException ex) {
                Logger.getLogger(GatewayProfesor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }   
        return actualizo;
    }
       
    public boolean InsertarPlanEstudio(String ID, String nombre, String grado, String totalCreditos, String descripcion, String ultimaModificacion){
        boolean insertar = false;
        this.AbrirConexion();
        if (conn != null) {
            try {//se realiza el insert
                stm = conn.createStatement();
                String strSQL = "INSERT INTO PlanEstudio VALUES ('"+ID+"','"+nombre+"','"+grado+"','"+totalCreditos+"','"+descripcion+"','"+ultimaModificacion+"')";
                int rowsEffected = stm.executeUpdate(strSQL);
                insertar = true;
                //retorno = mapping.findForward(SUCCESS);
            }catch(SQLException ex){
                //retorno = mapping.findForward(FALLACONEXION);
                insertar = false;
            }
            try {
                conn.close();//cierra la conexion  */
            } catch (SQLException ex) {
                Logger.getLogger(GatewayProfesor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return insertar;
    }
    
    public boolean InsertPlanEstudioCiclos(String ID, String sigla, String ano, String semestre){
        boolean insertar=false;
        this.AbrirConexion();
        if (conn != null) {
            try {//se realiza el insert
                stm = conn.createStatement();
                String strSQL = "INSERT INTO Ciclos VALUES ('"+ID+"','"+sigla+"','"+ano+"','"+semestre+"')";
                int rowsEffected = stm.executeUpdate(strSQL);
                insertar=true;
            }catch(SQLException ex){
                insertar = false;
            }
            try {
                conn.close();//cierra la conexion*/
            } catch (SQLException ex) {
                Logger.getLogger(GatewayProfesor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return insertar;
    }               
    
    //Despliegue en el JSP
    public static LinkedList<CrearPlanEstudioForm> getListaPlanesEstudio(){
      LinkedList<CrearPlanEstudioForm> listaPlanes=new LinkedList<CrearPlanEstudioForm>();
      ConexionBaseDatos establecerConexion = new ConexionBaseDatos();
      Connection conn = null;
      try{
         conn = establecerConexion.ConectarBD();
         if(conn != null){//si tenemos conexion
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery("select ID,nombre,grado from PlanEstudio");
             while (rs.next()){
                CrearPlanEstudioForm Plan = new CrearPlanEstudioForm();   
                Plan.setID(rs.getString("ID"));
                Plan.setNombre(rs.getString("nombre"));
                Plan.setGrado(rs.getString("grado"));
                listaPlanes.add(Plan);
             }
             rs.close();
             st.close();
             conn.close();
         }
      }catch (Exception e){
         e.printStackTrace();
      }
      return listaPlanes;
   }//fin metodo
}
